O filtro gaussiano possui apenas um parâmetro livre, que é a frequência de corte da filtragem (que basicamente dá a largura do filtro).

Reading the data


Lately, the .fits data was transformed into .csv and saved in database/csv_files. We are going to import a light curve sample and work with it.

[2]:
FILE_PATH = '/content/drive/MyDrive/01 - Iniciação Científica/02 - Datasets/csv_files/EN2_STAR_CHR_0101086161_20070516T060226_20071005T074409.csv'
[3]:
import pandas as pd

data_sample = pd.read_csv(FILE_PATH)
display(data_sample)
DATE WHITEFLUX
0 2007-05-16 18:10:55.071642 112626.77
1 2007-05-16 18:19:27.113766 112605.61
2 2007-05-16 18:27:59.155929 112771.50
3 2007-05-16 18:36:31.198092 113113.60
4 2007-05-16 18:45:03.240256 112621.79
... ... ...
23946 2007-10-05 19:08:02.358665 112438.61
23947 2007-10-05 19:16:34.313684 112406.01
23948 2007-10-05 19:25:06.268742 112496.13
23949 2007-10-05 19:33:38.223801 112344.83
23950 2007-10-05 19:42:10.178859 112318.50

23951 rows × 2 columns

[4]:
import numpy as np

x = data_sample.DATE.to_numpy()
y = data_sample.WHITEFLUX.to_numpy()

Gaussian Transfer Function


The transfer function of a Gaussian 1-D lowpass filter (GLPFs)

H(u) = e^{-D^2(u)/2D^2_0}

where D(u) and D_0 was defined on 03 - Ideal Lowpass Filters.ipynb.

Note. The cutoff frequency must be given in Nyquist.

[5]:
cutoff_freq = 0.2
[6]:
def gaussian_array(array, fourier_transform, cutoff_freq):
  # Extrating information of the signal
  n_time = len(array)
  D0 = cutoff_freq * n_time
  xc = n_time

  # Creating the filter array
  len_filter = len(fourier_transform)
  filter = np.zeros(len_filter)

  for i in range(len_filter):
    filter[i] = exp( (-(i-(xc-1.0))**2)/(2*((cutoff_freq * n_time)**2)) )

  return filter

Choosing the best Gaussian parameters


On filters module, we can pass gaussian on the filter_technique and it will makes all the procedures for the Butterworth Lowpass filter.

[7]:
from tools import *

Plotting different cutoff frequencies

[8]:
cutoff_freqs = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
[22]:
i = 0
cutoff_freq = cutoff_freqs[i]

Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1

[23]:
cutoff_freq = cutoff_freqs[i]

Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1

[24]:
cutoff_freq = cutoff_freqs[i]

Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1

[25]:
cutoff_freq = cutoff_freqs[i]

Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1

[26]:
cutoff_freq = cutoff_freqs[i]

Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1

[27]:
cutoff_freq = cutoff_freqs[i]

Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1

[28]:
cutoff_freq = cutoff_freqs[i]

Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1

[29]:
cutoff_freq = cutoff_freqs[i]

Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1

[30]:
cutoff_freq = cutoff_freqs[i]

Filter = new_filters.FrequencyDomainFiltering()
Filter.filter(array=y, filter_technique='gaussian', numExpansion=70, cutoff_freq=cutoff_freq, order=None)
y_filtered = Filter.getFiltered
title = f"Gaussian filter with Cutoff frequency = {cutoff_freq}"
new_viz.view_filter_results(x, y, x, y_filtered, title=title)
print()
i += 1